#!/usr/bin/python
# -*- coding:utf-8 -*-
"""

文件模式	解释
r	以只读方式打开
w	以写方式打开,文件不为空时清空文件;文件不存在时新建文件。
a	追加模式,没有则创建
b   以二进制的形式读写
r+,w+,a+	以读写模式打开,参见w,a

file.close()
关闭文件。关闭后文件不能再进行读写操作。
file.flush()
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
file.fileno()
返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
file.isatty()
如果文件连接到一个终端设备返回 True,否则返回 False。
file.next()
返回文件下一行。
file.read([size])
从文件读取指定的字节数,如果未给定或为负则读取所有。
file.readline([size])
读取整行,包括 "\n" 字符。
file.readlines([sizehint])
读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区。
file.seek(offset[, whence])
设置文件当前位置
file.tell()
返回文件当前位置。
file.truncate([size])
截取文件,截取的字节通过size指定,默认为当前文件位置。
file.write(str)
将字符串写入文件,没有返回值。
file.writelines(sequence)
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

"""


def normal_read_test():
    f = open("demo.txt", "r")
    print(f.name)
    content = f.readlines()  # 读取所有行,储存在列表中,每个元素是一行。
    for line in content:
        print(line)


def with_write_test():
    with open("new.txt", "w") as f:
        print(f.closed)
        f.write("Hello World!")
    print(f.closed)


def with_read_test():
    """
    使用with测试,以后推荐用这种方式
    :return:
    """
    with open("demo.txt", "r") as f:
        for txt in f:
            print(txt)


def with_read_write_test():
    """
    使用with进行二进制文件读写测试,以后推荐用这种方式
    :return:
    """
    with open("photo.jpg", "rb") as fr:
        with open("ptoto_new.jpg", "wb") as fw:
            for content in fr:
                fw.write(content)


if __name__ == "__main__":
    # with_write_test()
    # with_read_test()
    with_read_write_test()
